// 03_control_flow.rs
// Rust 流程控制教程

fn main() {
    // 1. if 表达式
    let number = 3;
    
    if number < 5 {
        println!("条件为真");
    } else {
        println!("条件为假");
    }
    
    // 2. else if 多重条件
    let number = 6;
    
    if number % 4 == 0 {
        println!("number 能被 4 整除");
    } else if number % 3 == 0 {
        println!("number 能被 3 整除");
    } else if number % 2 == 0 {
        println!("number 能被 2 整除");
    } else {
        println!("number 不能被 4、3、2 整除");
    }
    
    // 3. if 是表达式，可以返回值
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };
    println!("if 表达式的结果: {}", number);
    
    // 4. loop 循环
    let mut counter = 0;
    
    let result = loop {
        counter += 1;
        
        if counter == 10 {
            break counter * 2;  // loop 也是表达式，可以返回值
        }
    };
    println!("loop 循环结果: {}", result);
    
    // 5. while 循环
    let mut number = 3;
    while number != 0 {
        println!("{}!", number);
        number -= 1;
    }
    println!("_while 循环结束!_");
    
    // 6. for 循环遍历集合
    let a = [10, 20, 30, 40, 50];
    
    for element in a.iter() {
        println!("for 循环元素的值: {}", element);
    }
    
    // 7. for 循环和 Range
    // 从 1 到 4（不包含 5）
    for number in 1..5 {
        println!("范围循环: {}", number);
    }
    
    // 从 1 到 5（包含 5）
    for number in 1..=5 {
        println!("包含末尾的范围循环: {}", number);
    }
    
    // 8. 使用 for 循环倒计时
    for number in (1..4).rev() {
        println!("倒计时: {}!", number);
    }
    println!("_倒计时结束!_");
    
    // 9. 嵌套循环和标签
    let mut count = 0;
    'outer: loop {
        println!("外层循环计数: {}", count);
        let mut remaining = 10;
        
        loop {
            println!("内层循环剩余: {}", remaining);
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'outer;  // 通过标签跳出外层循环
            }
            remaining -= 1;
        }
        
        count += 1;
    }
    println!("跳出嵌套循环");
    
    // 10. continue 和 break 在循环中的使用
    for i in 1..=10 {
        if i % 2 == 0 {
            continue;  // 跳过偶数
        }
        if i > 7 {
            break;  // 当 i 大于 7 时停止循环
        }
        println!("奇数: {}", i);
    }
}